//package com.sky.user.interceptor;
//
//import com.sky.common.constant.JwtClaimsConstant;
//import com.sky.common.context.BaseContext;
//import com.sky.user.config.JwtProperties;
//import com.sky.common.utils.JwtUtil;
//import io.jsonwebtoken.Claims;
//import lombok.RequiredArgsConstructor;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.stereotype.Component;
//import org.springframework.web.method.HandlerMethod;
//import org.springframework.web.servlet.HandlerInterceptor;
//
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//
///**
// * jwt令牌校验的拦截器-用户端
// * @author toki
// */
//@Component
//@Slf4j
//@RequiredArgsConstructor
//public class JwtTokenUserInterceptor implements HandlerInterceptor {
//
//    private final JwtProperties jwtProperties;
//
//    /**
//     * 校验jwt
//     *
//     * @param request  servlet请求
//     * @param response servlet响应
//     * @param handler  处理器对象, 可以是Controller方法或者其他资源
//     * @return true/false true放行，false拦截
//     */
//    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//        //判断当前拦截到的是Controller的方法还是其他资源
//        if (!(handler instanceof HandlerMethod)) {
//            //当前拦截的处理器不是Controller的方法（可能是静态资源文件等），直接放行
//            return true;
//        }
//
//        // 如果user-info存在，则说明已经登录，无需再校验jwt
//        String userInfo = request.getHeader("user-info");
//        if (userInfo != null) {
//            return true;
//        }
//
//        //1、从请求头中获取令牌token
//        String token = request.getHeader(jwtProperties.getUserTokenName());
//
//        //2、校验令牌
//        try {
//            // 当在管理端操作时，这里的token为null，因为设置了两个过滤器，无影响
//            log.info("User jwt校验:{}", token);
//            Claims claims = JwtUtil.parseJWT(jwtProperties.getUserSecretKey(), token);
//            Long userId = Long.valueOf(claims.get(JwtClaimsConstant.USER_ID).toString());
//            log.info("User 当前用户id：{}", userId);
//            // 3.存入上下文
//            BaseContext.setCurrentId(userId);
//            //4、放行
//            return true;
//        } catch (Exception ex) {
//            //4、不通过，响应401状态码
//            response.setStatus(401);
//            return false;
//        }
//    }
//
//    @Override
//    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
//        //清除上下文
//        BaseContext.removeCurrentId();
//    }
//}
